← بازگشت به فهرست
📘 فصل دهم · امنیت در لینوکس خلاصه جامع جلسات ۹۴ تا ۹۹
📅 تاریخ: شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian · 📦 Red Hat
🛡️ هدف فصل:

در این فصل با امنیت در لینوکس آشنا می‌شوید. از بررسی ورود کاربران و اسکن سیستم گرفته تا مدیریت رمز عبور، اتصال امن با SSH و رمزنگاری فایل‌ها با GPG. این مبانی برای هر مدیر سیستمی که می‌خواهد از سیستم خود در برابر تهدیدات محافظت کند، حیاتی است.

▍ ۱. بررسی ورود به سیستم (who, w, last)

یکی از وظایف مهم مدیر سیستم، نظارت بر ورود و خروج کاربران است. لینوکس تمام اطلاعات ورود و خروج را در فایل‌های لاگ ذخیره می‌کند و سه فرمان اصلی برای نمایش این اطلاعات وجود دارد:

🔵 who

  • کاربران فعال فعلی را نشان می‌دهد.
  • منبع: /var/run/utmp
  • گزینه‌ها: -b (زمان بوت)، -r (runlevel)، -u (زمان بیکاری)

🟢 w

  • کاربران فعال به همراه بار سیستم و فرمان در حال اجرا.
  • منبع: /var/run/utmp
  • ستون‌ها: USER, TTY, FROM, LOGIN@, IDLE, JCPU, PCPU, WHAT

🔴 last

  • تاریخچهٔ کامل ورود و خروج کاربران.
  • منبع: /var/log/wtmp
  • گزینه‌ها: -n N (تعداد خطوط)، -x (اطلاعات کامل)، last reboot (زمان ریبوت)
┌──(ya3in㉿kali)-[~] └─$ who -u ya3in seat0 2026-09-07 09:08 . 12345 root pts/0 2026-09-07 10:15 00:05 12346 └─$ w 10:35:18 up 1:27, 3 users, load average: 0.08, 0.03, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ya3in seat0 :0 09:08 1:27m 2.35s 0.12s gnome-shell root pts/0 192.168.1.100 10:15 5.00s 0.45s 0.05s w └─$ last -n 3 ya3in seat0 :0 Sat Sep 7 09:08 still logged in root pts/0 192.168.1.100 Sat Sep 7 10:15 - 10:35 (00:20) ali pts/1 192.168.1.101 Sat Sep 7 10:30 - 11:00 (00:30)
w ترکیبی از who، uptime و ps است.

▍ ۲. اسکن کردن سیستم (nmap, ss, netstat, lsof, fuser)

اصل طلایی امنیت: «قبل از هکر، خودت سیستم را اسکن کن». باید پورت‌های باز، سرویس‌های فعال و برنامه‌های پشت هر پورت را شناسایی و سرویس‌های غیرضروری را غیرفعال کنید.

nmap (اسکنر پورت حرفه‌ای)

nmap -sT 127.0.0.1 # اسکن TCP لوکال‌هوست nmap -sU 127.0.0.1 # اسکن UDP لوکال‌هوست nmap -6 ::1 # اسکن IPv6 nmap -sT 192.168.100.11 # اسکن از نمای شبکه

ss و netstat (پورت‌های باز)

ss -ltu # نمایش پورت‌های TCP/UDP در حال گوش‌دادن netstat --tcp --listening

lsof و fuser (برنامه‌های پشت پورت)

lsof -iTCP -sTCP:LISTEN lsof -i tcp:22 fuser -vn tcp 22

• غیرفعال کردن سرویس‌های غیرضروری

sudo systemctl stop SERVICE sudo systemctl disable SERVICE sudo systemctl mask SERVICE # قفل کامل
همیشه TCP و UDP و IPv4 و IPv6 را اسکن کنید.

▍ ۳. امن‌سازی دسترسی و رمز عبور

• محل ذخیرهٔ رمزها

• تغییر رمز با passwd و chpasswd

sudo passwd ali echo "ali:123456" | sudo chpasswd

• قفل و باز کردن کاربر

sudo passwd -l ali # قفل sudo passwd -u ali # باز کردن قفل sudo usermod -L ali # قفل با usermod sudo usermod -U ali # باز کردن با usermod

• دسترسی به root: su در مقابل sudo

🔵 su

  • تغییر به کاربر root (نیاز به رمز root).
  • su - (بارگیری محیط کامل root).
  • خطر: اشتراک رمز root، همه دستورات با دسترسی کامل اجرا می‌شوند.

🟢 sudo

  • اجرای یک دستور خاص با دسترسی root (نیاز به رمز خودتان).
  • دستورات در /var/log/auth.log لاگ می‌شوند.
  • تنظیم در /etc/sudoers با visudo.
  • افزودن کاربر به گروه sudo: sudo usermod -aG sudo ali
برای ویرایش /etc/sudoers حتماً از visudo استفاده کنید.

▍ ۴. استفاده از SSH (Secure Shell)

SSH یک پروتکل امن برای ارتباط با سیستم‌های راه دور است که جایگزین Telnet و FTP ناامن شده است. در SSH از جفت‌کلید عمومی/خصوصی برای احراز هویت استفاده می‌شود.

• تولید کلید با ssh-keygen

ssh-keygen -t rsa -b 4096 -C "my_key@server" # کلید خصوصی: ~/.ssh/id_rsa # کلید عمومی: ~/.ssh/id_rsa.pub

• انتقال کلید عمومی به سرور

ssh-copy-id user@192.168.1.100 # یا به‌صورت دستی: cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

• اتصال و انتقال فایل

ssh user@192.168.1.100 scp file.txt user@192.168.1.100:/tmp/ sftp user@192.168.1.100

• محدودیت‌های امنیتی SSH در /etc/ssh/sshd_config

# غیرفعال کردن ورود root PermitRootLogin no # تغییر پورت Port 2222 # غیرفعال کردن ورود با رمز عبور PasswordAuthentication no # غیرفعال کردن X11 Forwarding X11Forwarding no # غیرفعال کردن Challenge-Response ChallengeResponseAuthentication no # حداکثر تلاش برای ورود MaxAuthTries 3
قبل از غیرفعال کردن PasswordAuthentication، حتماً از تنظیم بودن کلید مطمئن شوید.

▍ ۵. رمزنگاری فایل با GPG

GPG (GNU Privacy Guard) یک پیاده‌سازی از استاندارد OpenPGP است که برای رمزنگاری فایل‌ها و امضای دیجیتال استفاده می‌شود. از رمزنگاری نامتقارن (Public/Private Key) استفاده می‌کند.

• تولید کلید

gpg --full-generate-key # انتخاب نوع: RSA و RSA (پیش‌فرض) # اندازه: 4096 بیت (پیشنهادی) # انقضا: 0 (بدون انقضا) # نام، ایمیل، کامنت و Passphrase

• صادرات و واردات کلید

gpg --armor --export ya3in@example.com > public.key gpg --import public.key gpg --list-keys gpg --list-secret-keys

• رمزنگاری و رمزگشایی

echo "LPIC1 GPG Public Key Test" > secret.txt gpg -e -r userb@example.com secret.txt # خروجی: secret.txt.gpg gpg -d secret.txt.gpg # نمایش محتوا (نیاز به Passphrase) gpg -d secret.txt.gpg > secret.txt

• نکات مهم

گزینهٔ --armor کلید را به فرمت متنی (ASCII) تبدیل می‌کند که برای ایمیل مناسب است.
📌 نکات طلایی برای امتحان (جمع‌بندی نهایی)
  • بررسی ورود: who (کاربران فعال)، w (بار سیستم + فرمان‌ها)، last (تاریخچه ورود).
  • اسکن سیستم: nmap (TCP، UDP، IPv6)، ss -ltu (پورت‌های باز)، lsof (برنامه‌های پشت پورت)، fuser (PID پورت).
  • رمزهای عبور: در /etc/shadow ذخیره می‌شوند (فقط root قابل خواندن).
  • قفل کاربر: passwd -l یا usermod -L.
  • دسترسی root: su (نیاز به رمز root) در مقابل sudo (نیاز به رمز خودتان، قابل لاگ‌گیری).
  • SSH: با ssh-keygen کلید بسازید، با ssh-copy-id انتقال دهید، محدودیت‌ها را در /etc/ssh/sshd_config اعمال کنید.
  • GPG: با --full-generate-key کلید بسازید، با --armor --export صادر کنید، با -e -r رمزنگاری و با -d رمزگشایی کنید.
  • اصل طلایی: «قبل از هکر، خودت سیستم را اسکن کن».
✅ تمرین عملی پیشنهادی
  • با who، w و last وضعیت ورود کاربران را بررسی کنید.
  • سیستم خود را با nmap (TCP، UDP، IPv6) اسکن کنید و پورت‌های باز را شناسایی کنید.
  • یک کاربر جدید بسازید، با passwd رمز تنظیم کنید و با usermod -L قفل کنید.
  • یک جفت‌کلید SSH با ssh-keygen بسازید و با ssh-copy-id به یک سرور آزمایشی انتقال دهید.
  • یک فایل متنی با gpg برای خودتان رمزنگاری و سپس رمزگشایی کنید.
  • تنظیمات امنیتی SSH را در /etc/ssh/sshd_config اعمال و سرویس را ری‌استارت کنید.